package com.cskaoyan.javase.array._2memory;

/**
 * 堆上对象中的元素是具有默认值的
 * 把JVM自动给对象中元素赋默认值的过程,称之为默认初始化
 * 默认初始化有别于手动初始化,不需要手动赋值.
 *
 * 对应类型元素的默认值是:
 * 整形（byte、short、int、long）默认值为0
 * 浮点类型（float、double）默认值为0.0
 * 字符类型（char）默认值是'\u0000' 表示编码值为0的字符，一个绝对空字符。
 * 布尔类型（boolean）默认值是false
 * 引用数据类型默认值是null
 *      null是一种字面值常量,它是一个特殊取值,null既不是对象也不是任何一种数据类型
 *      任何引用数据类型的引用都可以指向null
 *      指向null的引用可以认为引用指向了虚无，反正没有指向任何一个对象。
 *      这时引用可以用来操作对象吗?
 *      显然是不行的
 * 对象才是引用数据类型的实质，没有指向对象的引用实际上没有任何意义
 * 指向null的引用是无法正常使用的！
 *
 * 注意: 基本数据类型变量是不能等于null
 *
 *
 * @since 14:35
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {

        // int a = null;
        String str = null;
        int[] arr4 = null;
        // System.out.println(arr4.length);

        double[] arr = new double[3];
        System.out.println(arr[0]);
        char[] arr2 = new char[3];
        // char类型元素的默认值是"\u0000" 表示绝对空字符
        System.out.println(arr2[0] + "123");

        boolean[] arr3 = new boolean[3];
        System.out.println(arr3[0]);

        // 引用数据类型元素默认值是null
        String[] arr5 = new String[3];
        System.out.println(arr5[0]);

    }
}
